'use strict'

import fly from '@/utils/fly'
import { getOpenid } from '@/utils/login'

export async function getVisitorList () {
  let openid = await getOpenid()
  let res = await fly.post(`Visitors/get?wx_openid=${openid}`)
  if (res && res.code === 200 && res.data) {
    return res.data
  }
  return []
}

export async function addVisitor (data) {
  let openid = await getOpenid()
  let res = await fly.post(`Visitors/add?wx_openid=${openid}&v_id_card=${data.card}&v_id_type=${data.type}&v_truename=${data.name}`)
  return res
}

export const TicketType = {
  '1': '成人票',
  '2': '儿童票',
  '3': '老人票',
  '4': '优待票（儿童/学生/老人）',
  '111': '拼团',
  '99': '组合'
}

export async function asyncForEach (array, callback) {
  for (let index = 0; index < array.length; index++) {
    await callback(array[index], index, array)
  }
}

export function checkID (ID) {
  if (typeof ID !== 'string') return false
  let city = { 11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古', 21: '辽宁', 22: '吉林', 23: '黑龙江 ', 31: '上海', 32: '江苏', 33: '浙江', 34: '安徽', 35: '福建', 36: '江西', 37: '山东', 41: '河南', 42: '湖北 ', 43: '湖南', 44: '广东', 45: '广西', 46: '海南', 50: '重庆', 51: '四川', 52: '贵州', 53: '云南', 54: '西藏 ', 61: '陕西', 62: '甘肃', 63: '青海', 64: '宁夏', 65: '新疆', 71: '台湾', 81: '香港', 82: '澳门', 91: '国外' }
  let birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2))
  let d = new Date(birthday)
  let newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate())
  let currentTime = new Date().getTime()
  let time = d.getTime()
  let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  let arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
  let sum = 0
  let i
  let residue

  if (!/^\d{17}(\d|x)$/i.test(ID)) return false
  if (city[ID.substr(0, 2)] === undefined) return false
  if (time >= currentTime || birthday !== newBirthday) return false
  for (i = 0; i < 17; i++) {
    sum += ID.substr(i, 1) * arrInt[i]
  }
  residue = arrCh[sum % 11]
  if (residue !== ID.substr(17, 1)) return false

  return true
}

export const STATUS_DICT = {
  '10': '下单未支付',
  '20': '支付成功未使用',
  '30': '退款中',
  '31': '商家处理中',
  '32': '微信处理中',
  '40': '退款成功',
  '50': '完成',
  '60': '拼团中',
  '70': '拼团失败',
  '88': '已过期',
  '90': '取消',
  '99': '关闭'
}

export function requestPayment (payParam) {
  return new Promise((resolve, reject) => {
    wx.requestPayment({
      ...payParam,
      success (res) {
        resolve({
          code: 200
        })
      },
      fail (res) {
        resolve({
          code: -1
        })
      }
    })
  })
}

export async function doPay (orderSn) {
  let openid = await getOpenid()
  let res = await fly.post(`Order/payment?wx_openid=${openid}&order_sn=${orderSn}`)
  if (res && res.code === 200 && res.data) {
    let payResData = res.data
    let payParam = {
      timeStamp: '' + payResData.timeStamp,
      nonceStr: payResData.nonceStr,
      package: payResData.package,
      signType: 'MD5',
      paySign: payResData.paySign
    }
    let wxPayRes = await requestPayment(payParam)
    return wxPayRes
  } else {
    wx.showToast({
      title: `获取支付失败${res ? ('(' + res.code + ')') : ''}`,
      icon: 'none'
    })
    return false
  }
}
